/**
 * 队列封装
 * @returns {Queue}
 */
function Queue() {

    //初始化队列（使用数组实现）
    var items = [];

    //向队列（尾部）中插入元素
    this.enqueue = function (element) {
        items.push(element);
    };

    //从队列（头部）中弹出一个元素，并返回该元素
    this.dequeue = function () {
        return items.shift();
    };

    //查看队列最前面的元素（数组中索引为0的元素）
    this.front = function () {
        return items[0];
    };

    //查看队列是否为空，如果为空，返回true；否则返回false
    this.isEmpty = function () {
        return items.length === 0;
    };

    //查看队列的长度
    this.size = function () {
        return items.length;
    };

    //查看队列
    this.print = function () {
        //以字符串形势返回
        return items.toString();
    };
}
//  //示例：
//  var queue = new Queue();
//    queue.enqueue('hello');
//    queue.enqueue('world');
//    queue.enqueue('php');
//    queue.enqueue('javascript');
//    queue.enqueue('node.js');
//    console.log(queue.isEmpty());    // false
//    console.log(queue.print());      //hello,world,php,javascript,node.js 
//    console.log(queue.size());       //5
//    console.log(queue.front());      //hello
//
//    console.log(queue.dequeue());   //hello
//    console.log(queue.isEmpty());   //false
//    console.log(queue.print());     //world,php,javascript,node.js
//    console.log(queue.size());      //4
//    console.log(queue.front());     //world
//
//    console.log(queue.dequeue());   //world
//    console.log(queue.dequeue());   //php
//    console.log(queue.dequeue());   //javascript
//    console.log(queue.dequeue());   //node.js
//    console.log(queue.isEmpty());   //true
//    console.log(queue.print());     //(空字符串)
//    console.log(queue.size());      //0
//    console.log(queue.front());     // undefined


/**
 *  加载数据(持续刷新) 
 * @param {array}   data          第一次加载的数据，用于后续更新
 * @param {int}     refreshTime   刷新时间：ms
 * @param {int}     animateTime   动画时间：ms
 * @param {float}   step          步长：rem
 * @returns {null}
 */
function loadData(data, refreshTime, animateTime, step = 1.75) {
    setInterval(function () {
        //刷新排行榜数据
        var group_rank_all = data[0];
        var solo_rank_all = data[1];
        $.ajax({
            url: url + 'tv/rank/store',
            type: 'POST',
            dataType: 'json',
            success: function (res) {
//                console.log(res);
                if (res.code === 0) {
                    var group_rank = res.data.team;
                    var solo_rank = res.data.solo;
                    //更新数据,之前没有的团队增加到group_rank_all
                    for (let i = 0; i < group_rank.length; i++) {
                        for (let j = 0; j < group_rank_all.length; j++) {
                            if (group_rank[i].team_id === group_rank_all[j].team_id) {
                                group_rank_all[j] = group_rank[i];//更新数组
                                //更新dom
                                $('#group' + group_rank[i].team_id + '>p>span:first-child').text((i + 1));
                                $('#group' + group_rank[i].team_id + '>p>span:nth-child(2)').text(group_rank[i].name);
                                $('#group' + group_rank[i].team_id + '>p>span:nth-child(3)').text(group_rank[i].returned);
                                break;
                            }
                            //没有匹配到,增加变量及dom
                            if (j === group_rank_all.length - 1) {
                                group_rank_all.push(group_rank[i]);
                                var group_ul = $('#group').html();
                                group_ul += '<li id="group' + group_rank[i].team_id + '"><p><span>' + (i + 1) + '</span><span>' + group_rank[i].name + '</span><span>' + group_rank[i].returned + '</span></p></li>';
                                $('#group').html(group_ul);
                            }
                        }
                    }
                    //更新数据：之前没有的团队增加到solo_rank_all
                    for (let i = 0; i < solo_rank.length; i++) {
                        for (let j = 0; j < solo_rank_all.length; j++) {
                            if (solo_rank[i].team_id === solo_rank_all[j].team_id) {
                                solo_rank_all[j] = solo_rank[i];//更新数组
                                //更新dom
                                $('#solo' + solo_rank[i].team_id + '>p>span:first-child').text((i + 1));
                                $('#solo' + solo_rank[i].team_id + '>p>span:nth-child(2)').text(solo_rank[i].name);
                                $('#solo' + solo_rank[i].team_id + '>p>span:nth-child(3)').text(solo_rank[i].returned);
                                break;
                            }
                            //没有匹配到,增加变量及dom
                            if (j === solo_rank_all.length - 1) {
                                solo_rank_all.push(solo_rank[i]);
                                var solo_ul = $('#solo').html();
                                solo_ul += '<li id="solo' + solo_rank[i].team_id + '"><p><span>' + (i + 1) + '</span><span>' + solo_rank[i].name + '</span><span>' + solo_rank[i].returned + '</span></p></li>';
                                $('#solo').html(solo_ul);
                            }
                        }
                    }
                    //更新名次：本次接收的队伍显示，其他所有队伍移动到隐藏位置
                    for (let i = 0; i < group_rank_all.length; i++) {
                        for (let j = 0; j < group_rank.length; j++) {
                            if (group_rank_all[i].team_id === group_rank[j].team_id) {
                                $('#group' + group_rank[j].team_id).animate({top: step * (j) + 'rem'}, animateTime);
                                break;
                            }
                            //没有，移到隐藏位置
                            if (j === group_rank.length - 1) {
                                $('#group' + group_rank_all[i].team_id).animate({top: '14rem'}, animateTime);
                            }
                        }
                    }
                    //更新名次：本次接收的销售人员显示，其他人移动到隐藏位置
                    for (let i = 0; i < solo_rank_all.length; i++) {
                        for (let j = 0; j < solo_rank.length; j++) {
                            if (solo_rank_all[i].team_id === solo_rank[j].team_id) {
                                $('#solo' + solo_rank[j].team_id).animate({top: step * (j) + 'rem'}, animateTime);
                                break;
                            }
                            //没有，移到隐藏位置
                            if (j === solo_rank.length - 1) {
                                $('#solo' + solo_rank_all[i].team_id).animate({top: '14rem'}, animateTime);
                            }
                        }
                    }
                }
            }
        });
    }, refreshTime);
}

//弹幕状态数组(0:空闲,1:繁忙)
var barrage_queue = [0, 0, 0, 0, 0];
/**
 * 弹幕滚动操作
 * @param {int}    n        第几个弹幕（共5个,每个弹幕滚动周期设置为20s：10+5+4.5,剩余0.5s执行回退）
 * @param {string} content  弹幕内容
 * @returns {null}
 */
function scrollBarrage(n, content) {
    barrage_queue[n - 1] = 1;
//    播放音效
    var audio = document.getElementById('audio');
    audio.currentTime = 0;
    audio.play();

    $('#barrage' + n + '>div>span').text(content);
    $('#barrage' + n).animate({left: '5rem'}, 10000);//移动到屏幕中：10s
    setTimeout(function () {
        //停留一会然后向左移动：停留5s,移动4.5s
        $('#barrage' + n).animate({left: '-20rem'}, 4500, function () {
            $('#barrage' + n).animate({left: '38.6rem'}, 0);//回退：回到最右边
            barrage_queue[n - 1] = 0;
        });
    }, 15000);
}


/**
 * 加载弹幕到队列
 * @param {string}    time           页面开始加载弹幕的时间     
 * @param {int}      refresh_time   刷新时间（ms） default:5000
 * @returns {null}
 */
var last_time = '';
function loadBarrage(time, refresh_time = 5000) {

    var queue = new Queue();//新建一个队列
    last_time = time;
    setInterval(function () {
        $.ajax({
            url: url + 'tv/rank/bullet_screen',
            type: 'POST',
            dataType: 'json',
            data: {time: last_time},
            success: function (res) {
//                console.log(last_time);
                if (res.code === 0) {
                    last_time = res.data.time;
                    var barrage = res.data.msg;
                    if (barrage.length !== 0) {
                        for (let i = 0; i < barrage.length; i++) {
                            for (let j = 0; j < barrage[i].length; j++) {
                                queue.enqueue(barrage[i][j]);
                            }
                        }
                    }
                }
            }
        });
    }, refresh_time);

    //每2.5秒查看队列数据并发射弹幕
    setInterval(function () {
        console.log(queue.print());
        if (0 !== queue.size()) {
            //弹幕忙碌情况（0：空闲,1：忙碌）
            for (let i = 0; i < 5; i++) {
                //如果弹幕空闲
                if (barrage_queue[i] === 0) {
                    scrollBarrage(i + 1, queue.dequeue());
                }
                //队列已空则退出循环
                if (0 === queue.size()) {
                    break;
                }
            }
        }
    }, 2500);
}




/**
 * 兵王榜滚动
 * @param {int} eq 滚动次数（0-4）
 * @returns {null}
 */
function transformKing(eq) {

    var eq2, eq3, eq4, eq5 = eq;
    $('#rotate #king' + eq + ' p').hide();
    $('#rotate #king' + eq).animate({'opacity': 0}, 500, function () {
        $('#rotate #king' + eq + ' div').css({
            'transition': '0s',
            '-moz-transition': '0s',
            '-webkit-transition': '0s',
            '-o-transition': '0s'
        });
        $('#rotate #king' + eq).removeClass("rotate_to_left").addClass("rotate_to_right");
        setTimeout(function () {
            $('#rotate>ul>li>div').css({
                'transition': 'all 1s ease-in-out',
                '-moz-transition': 'all 1s ease-in-out',
                '-webkit-transition': 'all 1s ease-in-out',
                '-o-transition': 'all 1s ease-in-out'
            });
        }, 1000);
        $('#rotate #king' + eq).animate({'left': '26.8rem'}, 0, function () {
            $('#rotate #king' + eq).animate({'opacity': 0.5}, 500, function () {
                $('#rotate #king' + eq + ' p').show();
            });
        });
    });


    if (eq > 4) {
        eq2 = eq - 4;
    } else {
        eq2 = eq + 1;
    }
    $('#rotate #king' + eq2 + ' p').hide();
    $('#rotate #king' + eq2).css({'z-index': '1'});
    $('#rotate #king' + eq2).animate({'left': '4.2rem', 'opacity': 0.5}, 1000, function () {
        $('#rotate #king' + eq2 + ' p').show();
    });

    if (eq > 3) {
        eq3 = eq - 3;
    } else {
        eq3 = eq + 2;
    }
    $('#rotate #king' + eq3 + ' p').hide();
    $('#rotate #king' + eq3).css({'z-index': '2'});
    $('#rotate #king' + eq3).animate({'left': '9.2rem', 'top': '1rem', 'opacity': '0.7', 'height': '9rem', 'width': '7rem'}, 1000, function () {
        $('#rotate #king' + eq3 + ' p').show();
    }).css('overflow', 'visible');
    $('#rotate #king' + eq3).removeClass("rotate_to_mid").addClass("rotate_to_left");
    $('#rotate #king' + eq3 + '>div>img').animate({'height': '8.8rem', 'width': '7rem'}, 1000);
    $('#rotate #king' + eq3 + '>div>p').animate({'width': '7rem', 'font-size': '.6rem'}, 1000);

    if (eq > 2) {
        eq4 = eq - 2;
    } else {
        eq4 = eq + 3;
    }
    $('#rotate #king' + eq4 + ' p').hide();
    $('#rotate #king' + eq4).css({'z-index': '3'});
    $('#rotate #king' + eq4).animate({'left': '15rem', 'top': '0rem', 'opacity': 1, height: '10.6rem', width: '8.2rem'}, 1000, function () {
        $('#rotate #king' + eq4 + ' p').show();
    }).css('overflow', 'visible');
    $('#rotate #king' + eq4).removeClass("rotate_to_right").addClass("rotate_to_mid");
    $('#rotate #king' + eq4 + '>div>img').animate({'height': '10.6rem', 'width': '8rem'}, 1000);
    $('#rotate #king' + eq4 + '>div>p').animate({'width': '8rem', 'font-size': '.8rem'}, 1000);

    if (eq > 1) {
        eq5 = eq - 1;
    } else {
        eq5 = eq + 4;
    }

    $('#rotate #king' + eq5 + ' div').css({
        'transition': 'all 1s ease - in - out',
        '-moz-transition': 'all 1s ease - in - out',
        '-webkit-transition': 'all 1s ease - in - out',
        '-o-transition': 'all 1s ease - in - out'
    });
    $('#rotate #king' + eq5 + ' p').hide();
    $('#rotate #king' + eq5).css({'z-index': '2'});
    $('#rotate #king' + eq5).animate({'left': '21.8rem', 'opacity': 0.7}, 1000, function () {
        $('#rotate #king' + eq5 + ' p').show();
    });
}


